EC2 Bastion Host를 통해 Private Subnet EC2에 접속
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 EC2 Bastion Host를 통해 Private Subnet EC2에 접속하는 방법을 정리해 봤습니다.
EC2 Bastion Host 구성도
구성도는 다음과 같습니다. Bastion Host를 통해 Private EC2로 접속하며, Private EC2의 경우 Nat Gateway를 통해 외부와 통신합니다.
VPC 구성
먼저 VPC를 생성합니다. 이름과 CIDR은「EC2 Bastion Host」구성도에 나와있는 표와 동일하게 작성합니다.
VPC는 조금 전 생성한 Bastion-VPC를 선택하고, 표와 동일하게 작성합니다.
이어서 표를 보면서 추가로 3개의 서브넷을 생성합니다.
- Bastion-PublicSubnet-2
- Bastion-PrivateSubnet-1
- Bastion-PrivateSubnet-2
이어서 라우팅 테이블을 생성합니다. 라우팅 테이블 카테고리로 들어오면, 디폴트로 생성되어 있는 라우팅 테이블이 존재합니다. 이름을「PublicRT」로 수정하고 퍼블릭 라우팅 테이블로 사용합니다.
그리고「PrivateRT」이라는 이름으로 라우팅 테이블을 생성합니다.
이어서 각각의 라우팅 테이블에 서브넷을 연결합니다.
- PublicRT : Bastion-PublicSubnet-1, Bastion-PublicSubnet-2
- PrivateRT : Bastion-PrivateSubnet-1, Bastion-PrivateSubnet-2
다음으로 인터넷 게이트웨이를 생성합니다.
인터넷 게이트웨이가 생성 되었으면, VPC에 연결합니다. 작업 -> VPC에 연결을 클릭합니다.
그리고 Bastion-VPC를 선택하고 인터넷 게이트웨이 연결 버튼을 클릭합니다.
그리고 PublicRT에서 라우팅 카테고리를 클릭하고 라우팅 편집 버튼을 클릭합니다.
0.0.0.0, Bastion-IGW로 라우팅을 추가하고 변경 사항을 저장합니다.
이어서 NAT Gateway를 생성합니다. 탄력적 IP가 없을 경우「탄력적 IP 할당」버튼을 클릭하면 자동으로 탄력적 IP가 할당 됩니다.
여기서 서브넷은 반드시 퍼블릭 서브넷으로 지정해주셔야 합니다.
마지막으로 PrivateRT에서 조금 전 생성한 NAT Gateway를 추가합니다.
EC2 Bastion Host 생성
Bastion Host의 경우 Private Subnet에 있는 EC2로 들어가는 것이 목적이기 때문에 별다른 설정은 할 필요 없이, 네트워크, 서브넷, 퍼블릭 IP 자동 할당 부분만 신경 써 주면 됩니다. (테스트 환경이기 때문에 AMI의 경우 프리티어 리눅스를 선택했습니다.)
- 네트워크 : Bastion-VPC
- 서브넷 : Bastion-PublicSubnet-1
- 퍼블릭 IP 자동 할당 : 활성화
보안그룹은 SSH-TCP-22번 포트를 선택하고 소스는 내IP를 선택합니다.
이어서 키페어를 생성해서 다운로드한 다음, 인스턴스를 생성합니다.
- chmod 400 BastionEC2.pem
- ssh -i "BastionEC2.pem" ec2-user@3.12.150.37
위 명령어를 터미널에 입력하면 다음 그림과 같이 성공적으로 EC2 인스턴스에 접속할 수 있습니다.
이제 Private Subnet에 EC2를 만들어 보도록 하겠습니다.
- 네트워크 : Bastion-VPC
- 서브넷 : Bastion-PrivateSubnet-1
- 퍼블릭 IP 자동 할당 : 비활성화
EC2 인스턴스를 Private Subnet에 배치해서, 외부에서 접근하지 못하도록 합니다.
보안 그룹의 소스는 Bastion-EC2의 보안 그룹인 Bastion-EC2-SG를 선택해서 Bastion-EC2에서만 접속이 가능하도록 설정하고, 이전과 동일하게 키페어를 다운로드 하고 EC2 생성을 끝마칩니다.
현재 Bastion-EC2와 PrivateEC2가 생성되어 있는 상태입니다.
Private Subnet EC2로 접속
먼저 Private Subnet에 있는 EC2로 접속하기 위해서는 PrivateEC2의 키페어를 Bastion-EC2로 보낼 필요가 있습니다.
맥을 사용하고 있다면 간단하게 scp 명령어를 이용해서 파일을 업로드할 수 있습니다.
- scp -i [Bastion-EC2키페어경로] [업로드할파일] [user id]@[ec2 public IP]:[저장경로]
다음과 같은 명령어로 업로드할 수 있습니다.
Bastion-EC2로 접속해 보면 PrivateEC2의 키페어가 업로드 된 것을 확인할 수 있습니다.
- chmod 400 PrivateEC2.pem
- ssh -i "PrivateEC2.pem" ec2-user@10.0.147.39
다음 명령어로 접속해 보면 Bastion-EC2에서 PrivateEC2로 접속되는 것을 확인할 수 있습니다.
추가적으로 Bastion-PrivateSubnet-2에 키페어를 PrivateEC2와 동일하게 선택하고, EC2 인스턴스를 생성하면 똑같이 Bastion-EC2에서 접속할 수 있습니다.
- PrivateEC2-2 IP 주소 : 10.0.238.15
정상적으로 접속된 것을 확인할 수 있습니다.